﻿using BookStore.Solution.Entities;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BookStore.Solution.BLL
{
    public class CategoryManager
    {
        private string result = "";
        private DataTable generateTable()
        {
            DataTable dtCategory = new DataTable();
            dtCategory.Columns.Add("CategoryID", typeof(string));
            dtCategory.Columns.Add("CategoryName", typeof(string));
            dtCategory.Columns.Add("Description", typeof(string));
            dtCategory.Columns.Add("Type", typeof(string));
            return dtCategory;
        }
        public string Insert(Category category)
        {
            using (var context = new BookStoreEntities())
            {
                int numOfRows = context.Categories.Where(c => c.CategoryID == category.CategoryID).Count();
                if (numOfRows == 0)
                {
                    context.Categories.Add(category);
                    if (context.SaveChanges() > 0)
                    {
                        SystemLogManager.Insert("Thêm danh mục: " + category);
                        result = "Thêm thành công";
                    }
                    else
                        result = "Thêm thất bại";
                }
                else
                {
                    result = "Mã danh mục đã tồn tại trong hệ thống. Vui lòng chọn mã danh mục khác.";
                }

            }
            return result;
        }
        public string Update(Category cate)
        {
            using (var context = new BookStoreEntities())
            {
                Category category = (from c in context.Categories
                                     where c.CategoryID == cate.CategoryID
                                     select c).First();
                category.CategoryName = cate.CategoryName;
                category.Description = cate.Description;
                category.Type = cate.Type;
                category.Status = cate.Status;
                if (context.SaveChanges() > 0)
                {
                    SystemLogManager.Insert("Cập nhật danh mục: " + category);
                    result = "Cập nhật thông tin danh mục thành công";
                }
                else
                    result = "Cập nhật thông tin danh mục thất bại";
            }
            return result;
        }
        public int Delete(string cate)
        {
            int result = 0;
            using (var context = new BookStoreEntities())
            {
                //Product product = context.Products.Where(b => b.CategoryID == cate).FirstOrDefault<Product>();
                //if (product == null)
                //{
                    Category category = (from c in context.Categories
                                         where c.CategoryID == cate
                                         select c).First();
                    category.Status = "Đã xóa";
                    result = context.SaveChanges();
                    if (result > 0)
                    {
                        SystemLogManager.Insert("Xóa danh mục: " + category);
                    }
                //}
            }
            return result;
        }
        public DataTable SearchbyID(string cateID, string type)
        {
            DataTable dtCategory = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listCategory = from c in context.Categories where c.CategoryID == cateID && c.Status == "Khả dụng" && c.Type == type select c;
                foreach (var row in listCategory)
                {
                    dtCategory.LoadDataRow(new object[] { row.CategoryID, row.CategoryName, row.Description, row.Type }, false);
                }
            }
            return dtCategory;
        }
        public DataTable SearchbyName(string Name, string type)
        {
            DataTable dtCategory = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listCategory = from c in context.Categories where c.CategoryName.Contains(Name) && c.Type == type select c;
                foreach (var row in listCategory)
                {
                    dtCategory.LoadDataRow(new object[] { row.CategoryID, row.CategoryName, row.Description, row.Type }, false);
                }
            }
            return dtCategory;
        }
        public DataTable GetAll(string type)
        {
            DataTable dtCategory = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listCategory = from c in context.Categories where c.Status == "Khả dụng" && c.Type == type select c;
                foreach (var row in listCategory)
                {
                    dtCategory.LoadDataRow(new object[] { row.CategoryID, row.CategoryName, row.Description, row.Type }, false);
                }
            }
            return dtCategory;
        }

        public Category GetDetail(string ID)
        {
            Category category = null;
            using (var context = new BookStoreEntities())
            {
                try
                {
                    category = context.Categories.Where(c => c.CategoryID == ID).FirstOrDefault<Category>();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            return category;
        }

    }
}
